package Providers

import (
	"github.com/gin-gonic/gin"
	"hyper/app/Http/Middleware"
	"hyper/routes"
	"hyper/supports/configs"
)

func RouteBoot() {
	router := gin.New()
	
	// 注册全局中间件
	RegisterGlobalMiddleware(router)
	
	// 注册admin路由
	AdminRoute(router)
	
	//  注册 API 路由
	ApiRouters(router)
	
	// 注册 web 路由
	WebRouters(router)
	
	// 运行模式
	// DebugMode：debug调试模式有详细得日志输出
	// ReleaseMode：生产模式关闭详细得日志输出保留异常日志
	// TestMode：test 模式跟生产模式类似 用于调试组件模拟生产环境单元测试等
	gin.SetMode(gin.DebugMode)
	
	// 静态文件服务
	router.Static("/uploads", "./public/uploads")
	router.Static("/css", "./public/css")
	router.Static("/js", "./public/js")
	router.Static("/images", "./public/images")
	
	router.Run(":" + configs.Get("app.port"))
}

// 全局中间件
func RegisterGlobalMiddleware(router *gin.Engine) {
	router.Use(
		// Recovery
		Middleware.Recovery(),
		// 日志
		Middleware.Logger(),
	)
}

// 注册admin路由
func AdminRoute(r *gin.Engine) {
	admin := r.Group("/admin")
	routes.RegisterAdminRoute(admin)
}

// 注册api路由
func ApiRouters(r *gin.Engine) {
	api := r.Group("/api")
	routes.RegisterApiRoute(api)
}

// 注册 web 路由
func WebRouters(r *gin.Engine) {
	web := r.Group("/")
	routes.RegisterWebRoute(web)
}
